package com.kingyun.gpsinspection.purificationservice.facade.service.activiti.base;


import com.kingyun.gpsinspection.purificationservice.common.bean.Page;

import java.util.Map;

/**
 * 工作流相关Service
 *@author zjh
 * @since 20170525
 */
public interface WorkFlowService {


    /**
     * 得到某个用户的待办任务
     * @param userId 用户Id
     * @param page 分页参数
     * @return
     */
     Page getTodoTasksByPage(String userId, Page page);

    /**
     * 得到某个用户的已办任务
     * @param userId 用户Id
     * @param page 分页参数
     * @return
     */
     Page getDoneTaskByPage(String userId, Page page);


    /**
     * 得到某个用户的发起的流程(包含已经完成和未完成的)
     * @param userId 用户id
     * @param page
     * @return
     */
    Page getRunningProcessinstances(String userId,Page page);


    /**
     * 得到某个流程实例的任务列表(包括完成和未完成的)
     * @param processInstanceId 流程实例id
     * @param type 1.完成,2 未完成
     * @return
     */
    Map<String,Object> getHistoricTaskInstance(String processInstanceId,String type);


    /**
     * 根据流程Key启动流程
     * @param key 流程key
     * @param businessId 业务ID
     * @param params 流程相关变量
     * @return
     */
     Map<String,Object> startProcessInstanceByKey(String key,String businessId, Map<String, Object> params,String userId) throws Exception;


    /**
     * 根据流程Id启动流程
     * @param id 流程id
     * @param businessId 业务ID
     * @param params 流程变量
     * @return
     */
     Map<String,Object> startProcessInstanceById(String id,String businessId, Map<String, Object> params,String userId);


    /**
     * 得到某个参与的流程
     * @param userId 参与人Id
     * @param page 分页参数
     * @param type 类型1.完成,2.未完成
     * @return
     */
     Page getPartakeByPage(String userId, Page page, String type);


    /**
     * 完成任务
     * @param taskId 任务Id
     * @param variable 流程变量
     * @param commet 注释
     * @param userId 用户id
     * @return
     */
     Map<String,Object> completeTask(String taskId,Map<String,Object> variable,String commet,String userId);



    /**
     * 完成代理任务
     * @param taskId 任务Id
     * @param variable 流程变量
     * @param commet 注释
     * @param userId 用户id
     * @return
     */
    Map<String,Object> completeDelegateTask(String taskId,Map<String,Object> variable,String commet,String userId);

    /**
     * 驳回任务
     * @param taskId
     * @param variable
     * @param commet
     * @return
     */
    Map<String,Object> reject(String taskId,Map<String,Object> variable,String commet);


    /**
     * 代理任务
     * @param taskId 任务Id
     * @param delegateUserId 代理用户Id
     * @return
     */
    Map<String,Object> delegateTask(String taskId,String delegateUserId);


    /**
     * 终止流程
     * @param taskId 任务id
     * @param reson 终止任务
     * @return
     */
    Map<String,Object> stopProcessInstance(String taskId,String reson);

}
